home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Tool Chest / !Interfaces / Universal Interfaces 2.0a1 / PInterfaces / SoundComponents.p < prev    next >
Encoding:
Text File  |  1994-07-17  |  15.5 KB  |  400 lines  |  [TEXT/MPS ]

  1. {
  2.      File:        SoundComponents.p
  3.  
  4.      Copyright:    © 1984-1994 by Apple Computer, Inc.
  5.                  All rights reserved.
  6.  
  7.      Version:    Universal Interfaces 2.0a1.  ETO #15, MPW prerelease.  Sunday, July 17, 1994. 
  8.  
  9.      Bugs?:        If you find a problem with this file, send the file and version
  10.                  information (from above) and the problem description to:
  11.  
  12.                      Internet:    apple.bugs@applelink.apple.com
  13.                      AppleLink:    APPLE.BUGS
  14.  
  15. }
  16.  
  17. {$IFC UNDEFINED UsingIncludes}
  18. {$SETC UsingIncludes := 0}
  19. {$ENDC}
  20.  
  21. {$IFC NOT UsingIncludes}
  22.  UNIT SoundComponents;
  23.  INTERFACE
  24. {$ENDC}
  25.  
  26. {$IFC UNDEFINED __SOUNDCOMPONENTS__}
  27. {$SETC __SOUNDCOMPONENTS__ := 1}
  28.  
  29. {$I+}
  30. {$SETC SoundComponentsIncludes := UsingIncludes}
  31. {$SETC UsingIncludes := 1}
  32.  
  33.  
  34. {$IFC UNDEFINED __COMPONENTS__}
  35. {$I Components.p}
  36. {$ENDC}
  37. {    Types.p                                                        }
  38. {        ConditionalMacros.p                                        }
  39. {    MixedMode.p                                                    }
  40.  
  41. {$IFC UNDEFINED __SOUND__}
  42. {$I Sound.p}
  43. {$ENDC}
  44.  
  45. {$PUSH}
  46. {$ALIGN MAC68K}
  47. {$LibExport+}
  48.  
  49. CONST
  50. {sound component types and subtypes}
  51.     kNoSoundComponentType        = '****';
  52.     kSoundComponentType            = 'sift';
  53.     kRate8SubType                = 'ratb';                        {8-bit rate converter}
  54.     kRate16SubType                = 'ratw';                        {16-bit rate converter}
  55.     kConverterSubType            = 'conv';                        {sample format converter}
  56.     kSndSourceSubType            = 'sour';                        {generic source component}
  57.     kMixerType                    = 'mixr';
  58.     kMixer8SubType                = 'mixb';                        {8-bit mixer}
  59.     kMixer16SubType                = 'mixw';                        {16-bit mixer}
  60.     kClassicSubType                = 'clas';                        {"classic" hardware, i.e. Mac Plus}
  61.     kASCSubType                    = 'asc ';                        {Apple Sound Chip device}
  62.     kDSPSubType                    = 'dsp ';                        {DSP device}
  63.     kAwacsSubType                = 'awac';                        {Another of Will's Audio Chips device}
  64.     kSingerSubType                = 'sing';                        {Singer (via Whitney) based sound}
  65.     kSoundCompressor            = 'scom';
  66.     kSoundDecompressor            = 'sdec';
  67.     kMace3SubType                = 'MAC3';                        {MACE 3:1}
  68.     kMace6SubType                = 'MAC6';                        {MACE 6:1}
  69.     kCDXA4SubType                = 'cdx4';                        {CD/XA 4:1}
  70.     kCDXA2SubType                = 'cdx2';                        {CD/XA 2:1}
  71.     kIMA4SubType                = 'ima4';                        {IMA 4:1}
  72.     kSoundComponentCodeType        = kSoundComponentType;            {code for the sound components}
  73. {Audio components and sub-types}
  74.     kAudioComponentType            = 'adio';
  75.     kAudioCodeType                = kAudioComponentType;
  76.     kAwacsPhoneSubType            = 'hphn';
  77.     kAudioVisionSpeakerSubType    = 'telc';
  78.     kAudioVisionHeadphoneSubType = 'telh';
  79. {sound component set/get info selectors}
  80.     siVolume                    = 'volu';
  81.     siHardwareVolume            = 'hvol';
  82.     siSpeakerVolume                = 'svol';
  83.     siHeadphoneVolume            = 'pvol';
  84.     siHardwareVolumeSteps        = 'hstp';
  85.     siHeadphoneVolumeSteps        = 'hdst';
  86.     siHardwareMute                = 'hmut';
  87.     siSpeakerMute                = 'smut';
  88.     siHeadphoneMute                = 'pmut';
  89.     siRateMultiplier            = 'rmul';
  90.     siQuality                    = 'qual';
  91. {format types}
  92.     kOffsetBinary                = 'raw ';
  93.     kTwosComplement                = 'twos';
  94.     kMACE3Compression            = 'MAC3';
  95.     kMACE6Compression            = 'MAC6';
  96.  
  97. {quality flags}
  98.     kBestQuality                = 0+(1 * (2**(0)));                {use interpolation in rate conversion}
  99. {features flags}
  100.     k8BitRawIn                    = 0+(1 * (2**(0)));                {data description}
  101.     k8BitTwosIn                    = 0+(1 * (2**(1)));
  102.     k16BitIn                    = 0+(1 * (2**(2)));
  103.     kStereoIn                    = 0+(1 * (2**(3)));
  104.     k8BitRawOut                    = 0+(1 * (2**(8)));
  105.     k8BitTwosOut                = 0+(1 * (2**(9)));
  106.     k16BitOut                    = 0+(1 * (2**(10)));
  107.     kStereoOut                    = 0+(1 * (2**(11)));
  108.     kReverse                    = 0+(1 * (2**(16)));            {function description}
  109.     kRateConvert                = 0+(1 * (2**(17)));
  110.     kCreateSoundSource            = 0+(1 * (2**(18)));
  111.     kHighQuality                = 0+(1 * (2**(22)));            {performance description}
  112.     kRealTime                    = 0+(1 * (2**(23)));
  113. {useful bit masks}
  114.     kInputMask                    = $000000FF;                    {masks off input bits}
  115.     kOutputMask                    = $0000FF00;                    {masks off output bits}
  116.     kOutputShift                = 8;                            {amount output bits are shifted}
  117.     kActionMask                    = $00FF0000;                    {masks off action bits}
  118.     kSoundComponentBits            = $00FFFFFF;
  119.  
  120. {SoundComponentPlaySourceBuffer action flags}
  121.     kSourcePaused                = 0+(1 * (2**(0)));
  122.     kPassThrough                = 0+(1 * (2**(16)));
  123.     kNoSoundComponentChain        = 0+(1 * (2**(17)));
  124. {flags for OpenMixerSoundComponent}
  125.     kNoMixing                    = 0+(1 * (2**(0)));                {don't mix source}
  126.     kNoSampleRateConversion        = 0+(1 * (2**(1)));                {don't convert sample rate (i.e. 11 kHz -> 22 kHz)}
  127.     kNoSampleSizeConversion        = 0+(1 * (2**(2)));                {don't convert sample size (i.e. 16 -> 8)}
  128.     kNoSampleFormatConversion    = 0+(1 * (2**(3)));                {don't convert sample format (i.e. 'twos' -> 'raw ')}
  129.     kNoChannelConversion        = 0+(1 * (2**(4)));                {don't convert stereo/mono}
  130.     kNoDecompression            = 0+(1 * (2**(5)));                {don't decompress (i.e. 'MAC3' -> 'raw ')}
  131.     kNoVolumeConversion            = 0+(1 * (2**(6)));                {don't apply volume}
  132.     kNoRealtimeProcessing        = 0+(1 * (2**(7)));                {won't run at interrupt time}
  133.  
  134. {Audio Component constants}
  135. {Values for whichChannel parameter}
  136.     audioAllChannels            = 0;                            {All channels (usually interpreted as both left and right)}
  137.     audioLeftChannel            = 1;                            {Left channel}
  138.     audioRightChannel            = 2;                            {Right channel}
  139. {Values for mute parameter}
  140.     audioUnmuted                = 0;                            {Device is unmuted}
  141.     audioMuted                    = 1;                            {Device is muted}
  142. {Capabilities flags definitions}
  143.     audioDoesMono                = 0+(1 * (2**(0)));                {Device supports mono output}
  144.     audioDoesStereo                = 0+(1 * (2**(1)));                {Device supports stereo output}
  145.     audioDoesIndependentChannels = 0+(1 * (2**(2)));            {Device supports independent software control of each channel}
  146.  
  147. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  148. {typedefs}
  149. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  150. {ShortFixed consists of an 8 bit, 2's complement integer part in the high byte,}
  151. {with an 8 bit fractional part in the low byte; its range is -128 to 127.99609375}
  152.     
  153. TYPE
  154. ShortFixed = INTEGER;
  155.  
  156.     SoundComponentDataPtr = ^SoundComponentData;
  157.  
  158.     SoundComponentData = RECORD
  159.         flags:                    LONGINT;
  160.         format:                    OSType;
  161.         numChannels:            INTEGER;
  162.         sampleSize:                INTEGER;
  163.         sampleRate:                UnsignedFixed;
  164.         sampleCount:            LONGINT;
  165.         buffer:                    ^Byte;
  166.         reserved:                LONGINT;
  167.     END;
  168.     SoundParamBlockPtr = ^SoundParamBlock;
  169.  
  170.     SoundParamProcPtr = ProcPtr;  { FUNCTION SoundParam(VAR pb: SoundParamBlockPtr): BOOLEAN; }
  171.     SoundParamUPP = UniversalProcPtr;
  172.  
  173.     SoundParamBlock = RECORD
  174.         recordSize:                LONGINT;                                {size of this record in bytes}
  175.         desc:                    SoundComponentData;                        {description of sound buffer}
  176.         rateMultiplier:            UnsignedFixed;                            {rate multiplier to apply to sound}
  177.         leftVolume:                INTEGER;                                {volumes to apply to sound}
  178.         rightVolume:            INTEGER;
  179.         quality:                LONGINT;                                {quality to apply to sound}
  180.         filter:                    ComponentInstance;                        {filter to apply to sound}
  181.         moreRtn:                SoundParamUPP;                            {routine to call to get more data}
  182.         completionRtn:            SoundParamUPP;                            {routine to call when buffer is complete}
  183.         refCon:                    LONGINT;                                {user refcon}
  184.         result:                    INTEGER;                                {result}
  185.     END;
  186.     SoundSource = Ptr;
  187.  
  188.     CompressionInfoPtr = ^CompressionInfo;
  189.  
  190.     CompressionInfoHandle = ^CompressionInfoPtr;
  191.  
  192.     CompressionInfo = RECORD
  193.         recordSize:                LONGINT;
  194.         format:                    OSType;
  195.         compressionID:            INTEGER;
  196.         samplesPerPacket:        INTEGER;
  197.         bytesPerPacket:            INTEGER;
  198.         bytesPerFrame:            INTEGER;
  199.         bytesPerSample:            INTEGER;
  200.         futureUse1:                INTEGER;
  201.     END;
  202.     AudioInfoPtr = ^AudioInfo;
  203.  
  204.     AudioInfo = RECORD
  205.         capabilitiesFlags:        LONGINT;                                {Describes device capabilities}
  206.         reserved:                LONGINT;                                {Reserved by Apple}
  207.         numVolumeSteps:            INTEGER;                                {Number of significant increments between min and max volume}
  208.     END;
  209. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  210. {functions for sound components}
  211. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  212. {Sound Component dispatch selectors}
  213.  
  214. CONST
  215. {these calls cannot be delegated}
  216.     kSoundComponentInitOutputDeviceSelect = 1;
  217.     kSoundComponentSetSourceSelect = 2;
  218.     kSoundComponentGetSourceSelect = 3;
  219.     kSoundComponentGetSourceDataSelect = 4;
  220.     kSoundComponentSetOutputSelect = 5;
  221.     kDelegatedSoundComponentSelectors = $0100;                    {first selector that can be delegated up the chain}
  222. {these calls can be delegated and have own range}
  223.     kSoundComponentAddSourceSelect = kDelegatedSoundComponentSelectors + 1;
  224.     kSoundComponentRemoveSourceSelect = kDelegatedSoundComponentSelectors + 2;
  225.     kSoundComponentGetInfoSelect = kDelegatedSoundComponentSelectors + 3;
  226.     kSoundComponentSetInfoSelect = kDelegatedSoundComponentSelectors + 4;
  227.     kSoundComponentStartSourceSelect = kDelegatedSoundComponentSelectors + 5;
  228.     kSoundComponentStopSourceSelect = kDelegatedSoundComponentSelectors + 6;
  229.     kSoundComponentPauseSourceSelect = kDelegatedSoundComponentSelectors + 7;
  230.     kSoundComponentPlaySourceBufferSelect = kDelegatedSoundComponentSelectors + 8;
  231.  
  232. {Audio Component selectors}
  233.     kAudioGetVolumeSelect        = 0;
  234.     kAudioSetVolumeSelect        = 1;
  235.     kAudioGetMuteSelect            = 2;
  236.     kAudioSetMuteSelect            = 3;
  237.     kAudioSetToDefaultsSelect    = 4;
  238.     kAudioGetInfoSelect            = 5;
  239.     kAudioGetBassSelect            = 6;
  240.     kAudioSetBassSelect            = 7;
  241.     kAudioGetTrebleSelect        = 8;
  242.     kAudioSetTrebleSelect        = 9;
  243.     kAudioGetOutputDeviceSelect    = 10;
  244.     kAudioMuteOnEventSelect        = 129;
  245.  
  246. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  247. {Sound Manager 3.0 utilities}
  248.  
  249. FUNCTION OpenMixerSoundComponent(outputDescription: SoundComponentDataPtr; outputFlags: LONGINT; VAR mixerComponent: ComponentInstance): OSErr;
  250.     {$IFC NOT GENERATINGCFM}
  251.     INLINE $203C, $0614, $0018, $A800;
  252.     {$ENDC}
  253. FUNCTION CloseMixerSoundComponent(ci: ComponentInstance): OSErr;
  254.     {$IFC NOT GENERATINGCFM}
  255.     INLINE $203C, $0218, $0018, $A800;
  256.     {$ENDC}
  257. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  258. {basic sound component functions}
  259. FUNCTION SoundComponentInitOutputDevice(ti: ComponentInstance; actions: LONGINT): ComponentResult;
  260.     {$IFC NOT GENERATINGCFM}
  261.     INLINE $2F3C, 4, 1, $7000, $A82A;
  262.     {$ENDC}
  263. FUNCTION SoundComponentSetSource(ti: ComponentInstance; sourceID: SoundSource; source: ComponentInstance): ComponentResult;
  264.     {$IFC NOT GENERATINGCFM}
  265.     INLINE $2F3C, 8, 2, $7000, $A82A;
  266.     {$ENDC}
  267. FUNCTION SoundComponentGetSource(ti: ComponentInstance; sourceID: SoundSource; VAR source: ComponentInstance): ComponentResult;
  268.     {$IFC NOT GENERATINGCFM}
  269.     INLINE $2F3C, 8, 3, $7000, $A82A;
  270.     {$ENDC}
  271. FUNCTION SoundComponentGetSourceData(ti: ComponentInstance; VAR sourceData: SoundComponentDataPtr): ComponentResult;
  272.     {$IFC NOT GENERATINGCFM}
  273.     INLINE $2F3C, 4, 4, $7000, $A82A;
  274.     {$ENDC}
  275. FUNCTION SoundComponentSetOutput(ti: ComponentInstance; requested: SoundComponentDataPtr; VAR actual: SoundComponentDataPtr): ComponentResult;
  276.     {$IFC NOT GENERATINGCFM}
  277.     INLINE $2F3C, 8, 5, $7000, $A82A;
  278.     {$ENDC}
  279. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  280. {junction methods for the mixer, must be called at non-interrupt level}
  281. FUNCTION SoundComponentAddSource(ti: ComponentInstance; VAR sourceID: SoundSource): ComponentResult;
  282.     {$IFC NOT GENERATINGCFM}
  283.     INLINE $2F3C, 4, $0101, $7000, $A82A;
  284.     {$ENDC}
  285. FUNCTION SoundComponentRemoveSource(ti: ComponentInstance; sourceID: SoundSource): ComponentResult;
  286.     {$IFC NOT GENERATINGCFM}
  287.     INLINE $2F3C, 4, $0102, $7000, $A82A;
  288.     {$ENDC}
  289. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  290. {info methods}
  291. FUNCTION SoundComponentGetInfo(ti: ComponentInstance; sourceID: SoundSource; selector: OSType; infoPtr: UNIV Ptr): ComponentResult;
  292.     {$IFC NOT GENERATINGCFM}
  293.     INLINE $2F3C, 12, $0103, $7000, $A82A;
  294.     {$ENDC}
  295. FUNCTION SoundComponentSetInfo(ti: ComponentInstance; sourceID: SoundSource; selector: OSType; infoPtr: UNIV Ptr): ComponentResult;
  296.     {$IFC NOT GENERATINGCFM}
  297.     INLINE $2F3C, 12, $0104, $7000, $A82A;
  298.     {$ENDC}
  299. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  300. {control methods}
  301. FUNCTION SoundComponentStartSource(ti: ComponentInstance; count: INTEGER; VAR sources: SoundSource): ComponentResult;
  302.     {$IFC NOT GENERATINGCFM}
  303.     INLINE $2F3C, 6, $0105, $7000, $A82A;
  304.     {$ENDC}
  305. FUNCTION SoundComponentStopSource(ti: ComponentInstance; count: INTEGER; VAR sources: SoundSource): ComponentResult;
  306.     {$IFC NOT GENERATINGCFM}
  307.     INLINE $2F3C, 6, $0106, $7000, $A82A;
  308.     {$ENDC}
  309. FUNCTION SoundComponentPauseSource(ti: ComponentInstance; count: INTEGER; VAR sources: SoundSource): ComponentResult;
  310.     {$IFC NOT GENERATINGCFM}
  311.     INLINE $2F3C, 6, $0107, $7000, $A82A;
  312.     {$ENDC}
  313. FUNCTION SoundComponentPlaySourceBuffer(ti: ComponentInstance; sourceID: SoundSource; pb: SoundParamBlockPtr; actions: LONGINT): ComponentResult;
  314.     {$IFC NOT GENERATINGCFM}
  315.     INLINE $2F3C, 12, $0108, $7000, $A82A;
  316.     {$ENDC}
  317. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  318. {interface for Audio Components}
  319. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  320. {Volume is described as a value between 0 and 1, with 0 indicating minimum}
  321. {volume and 1 indicating maximum volume; if the device doesn't support}
  322. {software control of volume, then a value of unimpErr is returned, indicating}
  323. {that these functions are not supported by the device}
  324. FUNCTION AudioGetVolume(ac: ComponentInstance; whichChannel: INTEGER; VAR volume: ShortFixed): ComponentResult;
  325.     {$IFC NOT GENERATINGCFM}
  326.     INLINE $2F3C, 6, 0, $7000, $A82A;
  327.     {$ENDC}
  328. FUNCTION AudioSetVolume(ac: ComponentInstance; whichChannel: INTEGER; volume: ShortFixed): ComponentResult;
  329.     {$IFC NOT GENERATINGCFM}
  330.     INLINE $2F3C, 4, 1, $7000, $A82A;
  331.     {$ENDC}
  332. {If the device doesn't support software control of mute, then a value of unimpErr is}
  333. {returned, indicating that these functions are not supported by the device}
  334. FUNCTION AudioGetMute(ac: ComponentInstance; whichChannel: INTEGER; VAR mute: INTEGER): ComponentResult;
  335.     {$IFC NOT GENERATINGCFM}
  336.     INLINE $2F3C, 6, 2, $7000, $A82A;
  337.     {$ENDC}
  338. FUNCTION AudioSetMute(ac: ComponentInstance; whichChannel: INTEGER; mute: INTEGER): ComponentResult;
  339.     {$IFC NOT GENERATINGCFM}
  340.     INLINE $2F3C, 4, 3, $7000, $A82A;
  341.     {$ENDC}
  342. {AudioSetToDefaults causes the associated device to reset its volume and mute values}
  343. {(and perhaps other characteristics, e.g. attenuation) to "factory default" settings}
  344. FUNCTION AudioSetToDefaults(ac: ComponentInstance): ComponentResult;
  345.     {$IFC NOT GENERATINGCFM}
  346.     INLINE $2F3C, 0, 4, $7000, $A82A;
  347.     {$ENDC}
  348. {This routine is required; it must be implemented by all audio components}
  349. FUNCTION AudioGetInfo(ac: ComponentInstance; info: AudioInfoPtr): ComponentResult;
  350.     {$IFC NOT GENERATINGCFM}
  351.     INLINE $2F3C, 4, 5, $7000, $A82A;
  352.     {$ENDC}
  353. FUNCTION AudioGetBass(ac: ComponentInstance; whichChannel: INTEGER; VAR bass: INTEGER): ComponentResult;
  354.     {$IFC NOT GENERATINGCFM}
  355.     INLINE $2F3C, 6, 6, $7000, $A82A;
  356.     {$ENDC}
  357. FUNCTION AudioSetBass(ac: ComponentInstance; whichChannel: INTEGER; bass: INTEGER): ComponentResult;
  358.     {$IFC NOT GENERATINGCFM}
  359.     INLINE $2F3C, 4, 7, $7000, $A82A;
  360.     {$ENDC}
  361. FUNCTION AudioGetTreble(ac: ComponentInstance; whichChannel: INTEGER; VAR Treble: INTEGER): ComponentResult;
  362.     {$IFC NOT GENERATINGCFM}
  363.     INLINE $2F3C, 6, 8, $7000, $A82A;
  364.     {$ENDC}
  365. FUNCTION AudioSetTreble(ac: ComponentInstance; whichChannel: INTEGER; Treble: INTEGER): ComponentResult;
  366.     {$IFC NOT GENERATINGCFM}
  367.     INLINE $2F3C, 4, 9, $7000, $A82A;
  368.     {$ENDC}
  369. FUNCTION AudioGetOutputDevice(ac: ComponentInstance; VAR outputDevice: Component): ComponentResult;
  370.     {$IFC NOT GENERATINGCFM}
  371.     INLINE $2F3C, 4, 10, $7000, $A82A;
  372.     {$ENDC}
  373. FUNCTION AudioMuteOnEvent(ac: ComponentInstance; muteOnEvent: INTEGER): ComponentResult;
  374.     {$IFC NOT GENERATINGCFM}
  375.     INLINE $2F3C, 2, 129, $7000, $A82A;
  376.     {$ENDC}
  377. CONST
  378.     uppSoundParamProcInfo = $000000D0; { FUNCTION (4 byte param): 1 byte result; }
  379.  
  380. FUNCTION NewSoundParamProc(userRoutine: SoundParamProcPtr): SoundParamUPP;
  381.     {$IFC NOT GENERATINGCFM }
  382.     INLINE $2E9F;
  383.     {$ENDC}
  384.  
  385. FUNCTION CallSoundParamProc(VAR pb: SoundParamBlockPtr; userRoutine: SoundParamUPP): BOOLEAN;
  386.     {$IFC NOT GENERATINGCFM}
  387.     INLINE $205F, $4E90;
  388.     {$ENDC}
  389.  
  390. {$ALIGN RESET}
  391. {$POP}
  392.  
  393. {$SETC UsingIncludes := SoundComponentsIncludes}
  394.  
  395. {$ENDC} {__SOUNDCOMPONENTS__}
  396.  
  397. {$IFC NOT UsingIncludes}
  398.  END.
  399. {$ENDC}
  400.